package com.ruoyi.web.petmall.pethome.controller;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.web.petmall.entity.AddressEntity;
import com.ruoyi.web.petmall.entity.UserEntity;
import com.ruoyi.web.petmall.pethome.service.UserInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * UserInfoController类，处理与用户信息相关的请求。
 */
@RestController
@RequestMapping("/petHome/user")
@Api(tags = "前台——用户信息")
public class UserInfoController extends BaseController {

    @Autowired
    private UserInfoService userInfoService;

    /**
     * 获取当前用户的个人信息。
     *
     * @return 当前用户信息的分页数据。
     */
    @GetMapping("/getUserInfo")
    @ApiOperation("获取当前用户信息")
    public TableDataInfo getUserInfo() {
        List<UserEntity> userList = userInfoService.getUserInfo();
        return getDataTable(userList);
    }

    /**
     * 修改当前用户的个人信息。
     *
     * @param userEntity 包含更新信息的用户实体。
     * @return 操作结果。
     */
    @PostMapping("/updateUserInfo")
    @ApiOperation("修改个人信息")
    public R<Void> updateUserInfo(@RequestBody UserEntity userEntity) {
        userInfoService.updateUserInfo(userEntity);
        return R.ok();
    }

    // 地址管理相关的接口
    /**
     * 获取当前用户的地址信息。
     *
     * @return 当前用户地址信息的分页数据。
     */
    @GetMapping("/getUserAddress")
    @ApiOperation("获取当前用户地址信息")
    public TableDataInfo getUserAddress() {
        List<AddressEntity> addressList = userInfoService.getUserAddress();
        return getDataTable(addressList);
    }

    /**
     * 添加新的地址信息。
     *
     * @param addressEntity 包含地址信息的地址实体。
     * @return 操作结果。
     */
    @PostMapping("/addUserAddress")
    @ApiOperation("添加地址信息")
    public R<Void> addUserAddress(@RequestBody AddressEntity addressEntity) {
        userInfoService.addUserAddress(addressEntity);
        return R.ok();
    }

    /**
     * 修改现有的地址信息。
     *
     * @param addressEntity 包含更新信息的地址实体。
     * @return 操作结果。
     */
    @PostMapping("/updateUserAddress")
    @ApiOperation("修改地址信息")
    public R<Void> updateUserAddress(@RequestBody AddressEntity addressEntity) {
        userInfoService.updateUserAddress(addressEntity);
        return R.ok();
    }

    /**
     * 删除指定的地址信息。
     *
     * @param id 要删除的地址ID。
     * @return 操作结果。
     */
    @PostMapping("/delUserAddress")
    @ApiOperation("删除地址信息")
    public R<Void> delUserAddress(@RequestParam Long id) {
        userInfoService.delUserAddress(id);
        return R.ok();
    }
}
